import 'package:flutter/widgets.dart';
import 'package:ideology/shared/widgets/code_input/config/editor_constants.dart';

/// 封装编辑器度量与文本样式的配置类。
///
/// 用于集中管理编辑器中涉及布局与测量的核心参数：
/// - 行高（像素）；
/// - 内边距（主要用于垂直方向）；
/// - 行号栏宽度；
/// - 文本样式（影响字符宽度计算与光标绘制）。
///
/// 默认值与 `editor_constants.dart` 中保持一致，保证与现有绘制逻辑兼容。
class EditorMetrics {
  /// 单行文本的高度（像素）。
  final double lineHeight;

  /// 文本区域的上下左右内边距。
  ///
  /// 当前主要用于垂直方向的排版。
  final double padding;

  /// 行号栏宽度（像素）。
  final double lineNumberWidth;

  /// 文本样式。
  ///
  /// 用于 `TextLayout` 测量和文本绘制。
  final TextStyle textStyle;

  /// 创建一个 [EditorMetrics]。
  ///
  /// 所有参数都有默认值，与 `editor_constants.dart` 保持一致：
  /// - [lineHeight] 默认 `kEditorLineHeight`；
  /// - [padding] 默认 `kEditorPadding`；
  /// - [lineNumberWidth] 默认 `kEditorLineNumberWidth`；
  /// - [textStyle] 默认 `TextStyle(fontSize: 16, fontFamily: 'JetBrains Mono')`。
  const EditorMetrics({
    this.lineHeight = kEditorLineHeight,
    this.padding = kEditorPadding,
    this.lineNumberWidth = kEditorLineNumberWidth,
    this.textStyle = const TextStyle(fontSize: 16, fontFamily: 'JetBrains Mono'),
  });

  /// 创建一个新的 [EditorMetrics]，基于当前实例修改部分字段。
  EditorMetrics copyWith({
    double? lineHeight,
    double? padding,
    double? lineNumberWidth,
    TextStyle? textStyle,
  }) {
    return EditorMetrics(
      lineHeight: lineHeight ?? this.lineHeight,
      padding: padding ?? this.padding,
      lineNumberWidth: lineNumberWidth ?? this.lineNumberWidth,
      textStyle: textStyle ?? this.textStyle,
    );
  }
}
